#include <iostream>
#include <thread>
#include <future>
#include <unistd.h>
int Add(int x, int y)
{
    std::cout << "加法!!!" << std::endl;
    sleep(5);
    return x + y;
}
int main()
{
    // std::launch::deferred, 执行async时先不执行指定函数, 在执行get获取异步结果的时候，才会执行异步任务
    // std::launch::async, 执行到async语句时, 内部会创建工作线程，异步的完成任务
    std::cout << "----------1----------\n";
    std::future<int> result = std::async(std::launch::async, Add, 11, 22);
    sleep(1);
    std::cout << "----------2----------\n";
    int sum = result.get(); // 在这里获取异步执行的结果, 这里会阻塞式的进行同步, 如果指定的任务还没有执行完, 就会阻塞到这里等待执行结束
    std::cout << "----------3----------\n";
    std::cout << sum << std::endl;
    
    return 0;
}